package datamodule;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import util.FString;
import conexao.Connect;

public class CidadesDAO {


	private DBuserVO userVO;

	public CidadesDAO( DBuserVO userVO){
		this.userVO = userVO;
	}
	//Inserir Cidades
	public int inserir(CidadesVO VOcid) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmtInsert = con.prepareStatement(
				"INSERT INTO cidades(cid_Cod_Cidade, cid_Descricao, cid_UF) " +
				" VALUES(?,?,?) ");
		pstmtInsert.setString(1, VOcid.getCid_Cod_Cidade());			
		pstmtInsert.setString(2, VOcid.getCid_Descricao());
		pstmtInsert.setString(3, VOcid.getCid_UF());

		int reg = pstmtInsert.executeUpdate();	
		con.close();
		return reg;
	}

	//Alterar Cidades
	public int alterar(CidadesVO VOcid) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		String virgula = "";
		StringBuffer sql = new StringBuffer(" UPDATE cidades SET ");
		if (!VOcid.getCid_Cod_Cidade().equals(FString.ignorar)) {
			sql.append(virgula+" cid_Cod_Cidade = '"+VOcid.getCid_Cod_Cidade()+"' ");
			virgula = ",";
		}
		if (!VOcid.getCid_Descricao().equals(FString.ignorar)) {
			sql.append(virgula+" cid_Descricao = '"+VOcid.getCid_Descricao()+"' ");
			virgula = ",";
		}

		if (!VOcid.getCid_UF().equals(FString.ignorar)) {
			sql.append(virgula+" cid_UF = '"+VOcid.getCid_UF()+"' ");
			virgula = ",";
		}

		sql.append(" WHERE cid_Cod_Cidade = '"+VOcid.getCid_Cod_Cidade()+"' ");
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0, sql.length()));
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}	
	
	// Deletar Cidades
	public int deletar(CidadesVO VOcid) throws ClassNotFoundException, SQLException {		
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmt = con.prepareStatement(
		"DELETE FROM cidades WHERE cid_Cod_Cidade = ?");
		pstmt.setString(1, VOcid.getCid_Cod_Cidade());
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}

	//Pesquisar Cidades
	public CidadesVO pesquisar(CidadesVO VOcid) throws ClassNotFoundException, SQLException {				
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM cidades  Where cid_Cod_Cidade <> '' ");
		
		if (!VOcid.getCid_Cod_Cidade().equals(FString.ignorar)) {
			sql.append(" AND UPPER(cid_Cod_Cidade) = '"+VOcid.getCid_Cod_Cidade()+"' ");			
		}		
		if (!VOcid.getCid_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(cid_Descricao) = '"+VOcid.getCid_Descricao()+"' ");			
		}
	
		System.out.println(sql);
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {

			VOcid = new CidadesVO();
			VOcid.setCid_Cod_Cidade( rs.getString("cid_Cod_Cidade"));
			VOcid.setCid_Descricao ( rs.getString("cid_Descricao"));
			VOcid.setCid_UF        ( rs.getString("cid_UF"));

		}else {
			VOcid = null;
		}
		pstmt.close();
		rs.close();
		con.close();
		return VOcid;
	}

	public ArrayList<CidadesVO> geral(CidadesVO VOcid) throws SQLException, ClassNotFoundException {		
		ArrayList<CidadesVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM cidades Where cid_Cod_Cidade <> '' ");
		if (!VOcid.getCid_Cod_Cidade().equals(FString.ignorar)) {
			sql.append(" AND UPPER(cid_Cod_Cidade) LIKE UPPER('"+VOcid.getCid_Cod_Cidade()+"%"+"')");
		}
		if (!VOcid.getCid_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(cid_Descricao) LIKE UPPER('"+VOcid.getCid_Descricao()+"%"+"')");
		}
		if (!VOcid.getOrdem().equals(FString.ignorar)) {
			sql.append(" ORDER BY "+VOcid.getOrdem());
		}
		if (!VOcid.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOcid.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<CidadesVO>();
			do {
				CidadesVO cid = new CidadesVO();
				cid.setCid_Cod_Cidade( rs.getString("cid_Cod_Cidade"));
				cid.setCid_Descricao ( rs.getString("cid_Descricao"));
				cid.setCid_UF        ( rs.getString("cid_UF"));

				lista.add(cid);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}	

	public ResultSet listagem(CidadesVO VOcid, Connection con) throws SQLException, ClassNotFoundException {		
		StringBuffer sql = new StringBuffer("SELECT * FROM cidades Where cid_Cod_Cidade <> '' ");
		if (!VOcid.getCid_Cod_Cidade().equals(FString.ignorar) && !VOcid.getCid_Cod_Cidade().isEmpty()) {
			sql.append(" AND UPPER(cid_Cod_Cidade)=('"+VOcid.getCid_Cod_Cidade()+"')");
		}
		if (!VOcid.getCid_Descricao().equals(FString.ignorar) && !VOcid.getCid_Descricao().isEmpty()) {
			sql.append(" AND UPPER(cid_Descricao) LIKE UPPER('"+VOcid.getCid_Descricao()+"%"+"')");
		}
		if (!VOcid.getCid_UF().equals(FString.ignorar) && !VOcid.getCid_UF().isEmpty()) {
			sql.append(" AND UPPER(cid_UF) = ('"+VOcid.getCid_UF()+"')");
		}

		if (!VOcid.getOrdem().equals(FString.ignorar) && !VOcid.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOcid.getOrdem());
		}
		if (!VOcid.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOcid.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		return rs;
	}	

}